package com.nk.controller;

import com.alibaba.fastjson.JSONObject;
import com.nk.Res.Result;
import com.nk.enums.ResponseCode;
import com.nk.pojo.User;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiOperationSupport;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.util.DigestUtils;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.HashMap;
import java.util.Map;

/**
 * @author 金园
 * @create 2023/5/18
 * @Description
 * @className UserLoginController
 * @packageName com.nk.controller
 */
@RequestMapping("/user")
@SuppressWarnings("All")
public class UserController {

    JdbcTemplate jdbcTemplate = new JdbcTemplate();

    /**
     * 用户登录
     * @param user
     * @return
     */
    @RequestMapping("/login")
    @ResponseBody
    @ApiOperationSupport(order = 0)
    @ApiOperation(value = "用户登录", notes = "传入User")
    public Result<String> login(@RequestBody User user) {
        // 判断请求参数是否合法
        if (user.getUserName().isEmpty() || user.getPassWord().isEmpty()) {
            return Result.fail(ResponseCode.FAILURE, "用户名或密码不能为空");
        }

        // 对用户名和密码进行 MD5 加密
        String username = DigestUtils.md5DigestAsHex(user.getUserName().getBytes());
        String password = DigestUtils.md5DigestAsHex(user.getPassWord().getBytes());

        // 打印用户信息
        System.out.println("用户名：" + username);
        System.out.println("密码：" + password);

        // 模拟验证通过
        if (username.equals("d41d8cd98f00b204e9800998ecf8427e") && password.equals("d41d8cd98f00b204e9800998ecf8427e")) {
            // 验证通过，返回成功的响应
            Map<String, Object> resultMap = new HashMap<>();
            resultMap.put("code", ResponseCode.SUCCESS.code());
            resultMap.put("message", "登录成功");
            resultMap.put("data", "这里可以放置用户信息或者 token 等信息");
            // 将包含 code、message 和 data 字段的 JSON 对象返回给客户端
            return Result.ok(new JSONObject(resultMap).toString());
        } else {
            // 验证未通过，返回失败的响应
            return Result.fail(ResponseCode.FAILURE, "用户名或密码错误");
        }
    }

    /**
     * 用户注册
     * @param user 用户信息
     * @return 注册结果
     */
    @RequestMapping("/register")
    @ResponseBody
    @ApiOperationSupport(order = 1)
    @ApiOperation(value = "用户注册", notes = "传入User")
    public Result<String> register(@RequestBody User user) {
        // 判断请求参数是否合法
        if (user.getUserName().isEmpty() || user.getPassWord().isEmpty() || user.getPhone().isEmpty()) {
            return Result.fail(ResponseCode.FAILURE, "用户名、密码和手机号不能为空");
        }

        // 对用户名、密码、手机号进行 MD5 加密
        String username = DigestUtils.md5DigestAsHex(user.getUserName().getBytes());
        String password = DigestUtils.md5DigestAsHex(user.getPassWord().getBytes());
        String phone = DigestUtils.md5DigestAsHex(user.getPhone().getBytes());

        // 打印用户信息
        System.out.println("用户名：" + username);
        System.out.println("密码：" + password);
        System.out.println("手机号：" + phone);

        // 注册成功
        User newUser = new User();
        newUser.setUserName(username);
        newUser.setPassWord(password);
        newUser.setPhone(phone);

        // 注册成功，返回成功的响应，并将新用户信息返回给客户端
        return Result.ok("注册成功，新用户信息：" + newUser.toString());
    }
}
